home *** CD-ROM | disk | FTP | other *** search
/ Turnbull China Bikeride / Turnbull China Bikeride - Disc 2.iso / STUTTGART / LANG / SCHEME / GNU / SCM4E1 / !Scm / slib / fluidlet < prev    next >
Text File  |  1993-09-08  |  824b  |  30 lines

  1. ; "fluidlet.scm", FLUID-LET for Scheme
  2. ; Copyright (c) 1992, Dorai Sitaram (dorai@cs.rice.edu)
  3.  
  4. (require 'rev4-optional-procedures)
  5. (require 'common-list-functions)
  6. (require 'dynamic-wind)
  7. (require 'macro)
  8.  
  9. (define list-set! (lambda (s i v) (set-car! (list-tail s i) v)))
  10.  
  11. (define-syntax fluid-let
  12.   (syntax-rules ()
  13.     ((fluid-let ((x v) ...) . body)
  14.      (let ((%x-names (list 'x ...))
  15.        (%x-values (list x ...))
  16.        (%fluid-x-values (list v ...)))
  17.        (dynamic-wind
  18.      (lambda ()
  19.            (set! x (list-ref %fluid-x-values
  20.                (comlist:position 'x %x-names)))
  21.            ...)
  22.      (lambda () . body)
  23.      (lambda ()
  24.            (let ((%x-position (comlist:position 'x %x-names)))
  25.              (list-set! %fluid-x-values %x-position x)
  26.          (set! x (list-ref %x-values %x-position)))
  27.        ...))))))
  28.  
  29. ;--- end of file
  30.